Android — layout_weight 解析

前言

  1. LinerLayout可以为其包含的控件指定填充权值layout_weight。这样就允许其包含的控件可以填充屏幕上的剩余控件,避免了所有控件挤成一堆的情况,剩余的空间会按这些控件的权值比例分配屏幕。
  2. 默认情况下,weight的值为0,表示按控件的实际大小显示;如果weight值设置高于0,剩余空间会按控件的weight值所占所有控件weight的比例分配给该控件。比如有两个控件,一个weight值为1,另一个为2,则剩余空间会把1/3的部分给控件一,剩下的2/3分配给控件二,也就是说权值越大,重要度越高。
  3. 如果LinerLayout包含子LinerLayout,子LinerLayout之间的权值越大,重要程度越小。如果有LinerLayout A包含LinerLayout C D,C权值为1,D权值为2,则屏幕的2/3会分配给C,1/3分给D。在LinerLayout嵌套的情况下,子LinerLayout必须要设置权值,否则默认情况下是未设置权值的子LinerLayout占据整个屏幕。

下面我们来测试一下,并讲解一个通用的计算方法。

测试

这个就比较好理解了,按权重划分,当把子控件android:layout_width=”match_parent”时,一下:

那么是怎么计算的呢?比较容易理解的解法是这样的滴:

既然三个TextView都是充满父类容器,那么剩下的空间就是1(match_parent)-3(match_parent)=-2(match_parent),然后剩下的空间按照权值分配,所以第一个TextView所占的空间为:1(match_parent)+(-2(match_parent)*1/6)=2/3(match_parent),第二个TextView所占的空间为:1(match_parent)+(-2(match_parent)2/6)=1/3(match_parent),第三个TextView也就不占空间了。

当然你也可以试试把LinearLaylout的android:orientation=”vertical”,也是一样的算法,屡试不爽。

参考

http://blog.csdn.net/pi9nc/article/details/9215297

http://www.cnblogs.com/w-y-f/p/4123056.html

我们一直都向往,面朝大海,春暖花开。 但是几人能做到,心中有爱,四季不败?